package cn.buddha.jest.jdbc;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

/**
 * @ClassName Main
 * @Author 友野浩二
 * @Date 2020/3/15 17:17
 * @Description 事务会话1
 * @Version 1.0
 *
 * <pre>
 * 事务隔离级别的验证方式：
 *     这里验证 READ_COMMITTED，其他隔离级别的验证方式也一样，只需要改动Main2类中main方法的事务隔离级别即可。
 *     1- 在 Main2 类中 for 循环中的第一行代码处打断点，然后以 debug 方式启动 Main2，执行for循环第一次遍历，可以看到日志打印 balance = 100;
 *     2- 在 Main 类中，提交事务的方法上打断点，然后以 debug 的方式启动 Main 类中的 main 方法；
 *     3- 接下来回到 Main2 类中，执行 for 循环的第二次遍历，可以看到，第二次查询结果与第一次是一样的，说明脏读问题已经不存在了；
 *     4- 回到 Main 类中，提交事务；
 *     5- 回到 Main2，执行第三次 for 循环，发现数据已经发生了变化，即这里发生了不可重复读问题。
 * </pre>
 */
public class Main {

    public static void main(String[] args) throws SQLException {
        Connection conn = DBUtils.getConnection();
        conn.setAutoCommit(false);// 不自动提交

        String sql = "update ea_acct_balance set BALANCE = 200 where INTERNAL_KEY = 1";
        PreparedStatement ps = conn.prepareStatement(sql);

        ps.executeUpdate();
        conn.commit();// 在此行打断点

        ps.close();
        conn.close();
    }

}
